package net.maku.system.service;

import net.maku.events.vo.ActivityJoinOrgBaseVO;
import net.maku.framework.common.utils.PageResult;
import net.maku.framework.mybatis.service.BaseService;
import net.maku.propagate.vo.VisibleOrgBaseVO;
import net.maku.system.entity.SysOrgEntity;
import net.maku.system.query.SysOrgQuery;
import net.maku.system.vo.*;

import java.util.List;

/**
 * 机构管理
 *
 * @author 阿沐 babamu@126.com
 * <a href="https://maku.net">MAKU</a>
 */
public interface SysOrgService extends BaseService<SysOrgEntity> {


    /**
     * 分页查询
     *
     * @param query 查询条件
     * @return 结果
     */
    PageResult<SysOrgVO> page(SysOrgQuery query);

    /**
     * 启用禁用
     *
     * @param id     主键
     * @param status 状态
     */
    void updateStatus(Long id, Integer status);

    /**
     * 建会申请分页
     *
     * @param query 查询条件
     * @return 结果
     */
    PageResult<SysOrgVO> applyPage(SysOrgQuery query);

    /**
     * 隶属关系迁移
     *
     * @param query 查询条件
     * @return 结果
     */
    PageResult<TransferOrgVO> transferPage(SysOrgQuery query);

    /**
     * 组织转移
     *
     * @param transferVO 请求
     */
    void transfer(OrgTransferVO transferVO);

    /**
     * 转移审核
     *
     * @param transId 转移id
     */
    void auditTrans(Long transId);

    /**
     * 管理管理员
     *
     * @param vo 请求
     */
    void manageAdmin(SysUserVO vo);

    List<SysOrgMemberVO> getSysOrgMemberVO(Long id);

    /**
     * 查询所有的
     *
     * @return 结果
     */
    List<SysOrgVO> getList();

    void save(SysOrgVO vo);

    void update(SysOrgVO vo);

    void delete(Long id);

    void setVisible(List<? extends VisibleOrgBaseVO> list);

    /**
     * 根据机构ID，获取子机构ID列表(包含本机构ID)
     *
     * @param id 机构ID
     */
    List<Long> getSubOrgIdList(Long id);

    /**
     * 根据机构ID列表，获取机构名称列表
     *
     * @param idList 机构ID列表
     */
    List<String> getNameList(List<Long> idList);

    /**
     * 设置活动参与组织名称
     *
     * @param activityJoinOrgName
     */
    void setActivityJoinOrgName(ActivityJoinOrgBaseVO activityJoinOrgName);
}